package proxy

import (
	"fmt"
	"io"
	"net/http"
)

func ProxyHandle(mux *http.ServeMux) {
	// 创建一个新的 HTTP 代理处理器
	mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		// 创建一个新的 HTTP 请求，使用原请求的方法和 URL
		fmt.Printf("r.URL.String(): %v\n", r.URL.String())

		req, err := http.NewRequest(r.Method, r.URL.String(), r.Body)
		if err != nil {
			http.Error(w, "Bad Request", http.StatusBadRequest)
			return
		}

		// 复制请求头
		for key, value := range r.Header {
			req.Header[key] = value
		}

		// 发送请求到目标服务器
		client := &http.Client{}
		resp, err := client.Do(req)
		if err != nil {
			http.Error(w, "Internal Server Error", http.StatusInternalServerError)
			return
		}
		defer resp.Body.Close()

		// 复制响应头
		for key, value := range resp.Header {
			w.Header()[key] = value
		}
		w.WriteHeader(resp.StatusCode)

		// 复制响应体
		io.Copy(w, resp.Body)
	})

	// // 启动 HTTP 代理服务器
	// port := "8080"
	// log.Printf("Starting HTTP proxy server on port %s...\n", port)
	// log.Fatal(http.ListenAndServe(":"+port, nil))
}
